package common.util;

import android.content.Context;
import android.os.PowerManager;

/**
 * 画面の明るさを維持する
 */
public class ScreenWakeLockHelper {
    private static final String TAG = ScreenWakeLockHelper.class.getSimpleName();
    private static ScreenWakeLockHelper sScreenWakeLock;
    private PowerManager.WakeLock mWakeLock;
    private Context mContext;

    private ScreenWakeLockHelper(Context context) {
        mContext = context;
    }

    /**
     * ScreenWakeLockのシングルインスタンスを取得する
     * 
     * @param context
     * @return ScreenWakeLockのシングルインスタンス
     */
    public static final ScreenWakeLockHelper getInstance(Context context) {
        if (sScreenWakeLock == null) {
            sScreenWakeLock = new ScreenWakeLockHelper(context);
        }
        return sScreenWakeLock;
    }

    private final PowerManager getPowerManager() {
        return (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
    }

    /**
     * 画面の最大明るさを維持する
     */
    public void acquireFullWakeLock() {
        if (mWakeLock == null) {
            mWakeLock = getPowerManager().newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
            mWakeLock.acquire();
        }
    }

    /**
     * 画面の現在明るさを維持する
     */
    public void acquirePartialWakeLock() {
        if (mWakeLock == null) {
            mWakeLock = getPowerManager().newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
            mWakeLock.acquire();
        }
    }

    /**
     * 画面の最低明るさを維持する
     */
    public void acquireScreenDimWakeLock() {
        if (mWakeLock == null) {
            mWakeLock = getPowerManager().newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, TAG);
            mWakeLock.acquire();
        }
    }

    /**
     * 画面の明るさを維持しない
     */
    public void release() {
        if (mWakeLock != null) {
            mWakeLock.release();
            mWakeLock = null;
            mContext = null;
            sScreenWakeLock = null;
        }
    }
}
